<?php
	/**
	 * 文件上传类
	 */
class Upload
{
	public static  $error;
	/**
	 * 核心上传方法
	 * @param array $file 上传文件的信息
	 * @param array $allow 允许上传文件的类型
	 * @param STRING $path 文件上传文件的路径
	 * @param int $maxsize=2M 文件上传的大小限制
	 * @return  false|$newname 上传失败就返回false,成功则是新的文件名
	 */
	public function uploadAction($file,$allow,$path,$maxsize=2097152)
	{
		#1.检查系统错误
		switch ($file['error']) 
		{
			case 1:
				self::$error = '文件大小超过系统限制';
				return false;
			case 2:
				self::$error = '文件大小超过浏览器限制';
				return false;
			case 3:
				self::$error = '上传文件不完整,请重新上传';
				return false;
			case 4:
				self::$error = '没有指定上传文件,你想干啥';
				return false;
			case 6:
			case 7:
				self::$error = '系统繁忙,请稍后再试';
				return false;
		}
		#2.检查逻辑错误
		//检查类型错误
		// $allow=array('image/jpeg','image/png','image/gif');
		if(!in_array($file['type'],$allow))
		{
			self::$error='文件类型不符,你要干啥,允许的类型有'.implode(',',$allow);
			return false;
		}
		//检查文件大小是否符合要求
		if($file['size']>$maxsize)
		{
			self::$error='你的文件超过100K';
			return false;
		}
		#3重命名文件
		$newname=$this->randName($file['name']);
		$target=$path.'/'.$newname;
		if(move_uploaded_file($file['tmp_name'],$target))
		{
			return  $newname;
		}
		else
		{
			self::$error='发生未知错误,上传失败!';
			return false;
		}
	}
	private function randName($filename)
	{
		$newname=date('YmdHis');
		$str='12345678901234567890';
		//加上7位随机数
		for($i=0;$i<7;$i++)
		{
			$newname.=$str[mt_rand(0,strlen($str)-1)];
		}
		$newname.=strrchr($filename,'.');
		return $newname;
	}
}